package com.cty.queue;
/*
* 用数组来模拟队列
* */

public class ArrayQueue {
    //数组的最大容量
    private int maxSize;
    private int front;//队列头(指向头数据的前一个位置)
    private int rear;//队列尾(尾数据本身)
    private int [] arr;//队列数组
    //初始化队列
    public ArrayQueue(int maxSize){
        this.maxSize=maxSize;
        arr=new int[maxSize];//初始化数组
        front=-1;
        rear=-1;
    }
    //判空方法
    public boolean isEmpty(){
        return front==rear;
    }
    //判满方法
    public boolean isFull(){
        return rear==maxSize-1;
    }
    //添加数据方法
    public void addQueue(int n){
        if(isFull()){
            System.out.println("队列已满~~");
            return;
        }
        rear++;
        arr[rear]=n;
    }
    //获取数据
    public int getQueue(){
        if(isEmpty()){
            throw new RuntimeException("队列为空，无法取出数据");
        }
        front++;
        return arr[front];
    }
    //遍历队列中的全部数据(注意不是获取)
    public void ListQueue(){
        if(isEmpty()){
            System.out.println("队列为空~~~");
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.printf("arr[%d]=%d\n",i,arr[i]);
        }

    }
    //查看队列的头数据(注意不是获取)
    public int peek(){
        if(isEmpty()){
            throw new RuntimeException("队列为空~~~");
        }
        return arr[front+1];
    }
}
